ﺣﻠﻘﻪ ھﺎ در ﺳﻲ ﺷﺎرپ :
ﻣﻘﺪﻣﻪ :
اﮔﺮ ﻧﯿﺎز ﺑﺎﺷﺪ ﺗﺎ ﻗﻄﻌﻪ ای از ﻛﺪ ﺑﯿﺶ از ﻳﻜﺒﺎر اﺟﺮا ﺷﻮد ﻧﯿﺎز ﺑﻪ اﺳﺘﻔﺎده از ﺣﻠﻘـﻪ ھـﺎ ﻣـﻲ ﺑﺎﺷـﺪ. ﺑـﺮای ﻣﺜـﺎل ﻓـﺮض ﻛﻨﯿﺪ آراﻳﻪ ای ﺑﻪ ﻃﻮل ۱۰۰۰ ﺗﻌﺮﻳﻒ ﻛﺮده اﻳﺪ. اﻛﻨﻮن ﻣﻲ ﺧﻮاھﯿﺪ آﻧﺮا ﺑﺎ ھﺰار ﻋﺪد ﻣﺘﻮاﻟﻲ ﭘﺮﻛﻨﯿـﺪ. ﺑـﺪﻳﮫﻲ اﺳـﺖ ﻛـﻪ روش زﻳﺮ ﻛﺎرآﻣﺪ ﻧﯿﺴﺖ! :
;[۱۰۰۰]int[] intData = new int
;۰=[۰]intData
.
.
.
;۹۹۹=[۹۹۹]intData
ﻧﻮﺷﺘﻦ اﻳﻦ ﺧﻄﻮط ﻣﺘﻮاﻟﻲ اﺣﺘﻤﺎﻻ ﺑﺎ ﻛﭙﻲ و ﭘﯿﺴﺖ و اﺻﻼح آن ﺣﺪاﻗﻞ ﻧﯿﻢ ﺳﺎﻋﺖ ﻃﻮل ﻣﻲ ﻛﺸﺪ! ﺑﻨﺎﺑﺮاﻳﻦ ﻧﯿـﺎز ﺑـﻪ وﺳﯿﻠﻪ ای ﺣﺲ ﻣﻲ ﺷﻮد ﻛﻪ ﺑﺘﻮان ﺑﻮﺳﯿﻠﻪ ی آن اﻣﺜﺎل اﻳﻨﮕﻮﻧﻪ ﻛﺎرھﺎ را اﻧﺠﺎم داد.
ﺗﻌﺮﻳﻒ ﺣﻠﻘﻪ ھﺎ و اﺳﺘﻔﺎده از آﻧﮫﺎ :
ﺑﺮای ﺗﻌﺮﻳﻒ ﺣﻠﻘﻪ ھـﺎ اﺑﺰارھـﺎی ﻣﺘﻌـﺪدی ﻣﺎﻧﻨـﺪ while, do , for , foreach وﺟـﻮد دارﻧـﺪ. اﺳـﺘﻔﺎده و اﻧﺘﺨـﺎب آﻧﮫـﺎ ﺑﺴﺘﮕﻲ ﺑﻪ ﺳﻠﯿﻘﻪ ی ﺷﻤﺎ و ﻣﻨﻄﻖ ﺑﺮﻧﺎﻣﻪ دارد. در ھﺮ ﺣﺎل ﻳﻚ ﻣﺴﺎﻟﻪ ﺑـﺪﻳﮫﻲ اﺳـﺖ ﻛـﻪ ھﻤـﻮاره ﺑـﯿﺶ از ﻳـﻚ راه ﺣﻞ ﺑﺮای ﻳﻚ ﻣﺴﺎﻟﻪ وﺟﻮد ﺧﻮاھﺪ داﺷﺖ.
اﺳﺘﻔﺎده از ﺣﻠﻘﻪ ی : for
ﻋﻤﻮﻣﺎ ﻛﺪﻧﻮﻳﺴﻲ را ﺑﺎ ﻛﺪ ﻧﻮﻳﺴﻲ ﻣﻲ ﺗﻮان آﻣﻮﺧﺖ! ﺑﻨﺎﺑﺮاﻳﻦ در ﻣﻮرد اﻧﻮاع ﺣﻠﻘﻪ ھﺎ ﻣﺜﺎﻟﮫﺎﻳﻲ اراﺋﻪ ﺧﻮاھﺪ ﮔﺮدﻳﺪ.
ﻳﻚ ﺑﺮﻧﺎﻣﻪ ی ﺳﻲ ﺷﺎرپ ﺟﺪﻳﺪ consoleرا در VS.NETﺑﺎز ﻛﻨﯿﺪ و ﻧﺎم آﻧـﺮا دراﺑﺘـﺪا ex۷۰ اﻧﺘﺨـﺎب ﻧﻤﺎﻳﯿـﺪ. ﺳـﭙﺲ ﻛـﺪ
زﻳﺮ را درون آن ﺑﻨﻮﻳﺴﯿﺪ :
;using System
namespace ex۷۰
}
class Class۱
}
[[STAThread
(static void Main(string[] args
}
;[۰۰۰۱]int[] intData = new int
( ++for ( int i=۰ ; i<۱۰۰۰ ; i
;intData[i]=i
(++for(int i=۰ ; i< intData.Length ; i
}
;[int j = intData[i
;(Console.WriteLine("intData[" + i + "]=" + j
{
;()Console.ReadLine
{
{
{
ﺗﻮﺿﯿﺤﺎﺗﻲ در ﻣﻮرد ﻛﺪ ﻓﻮق :
١- ﺑﺮای ﺗﻌﺮﻳﻒ ﺣﻠﻘﻪ ی for ھﻤﺎﻧﻄﻮر ﻛﻪ ﻣﻲ ﺑﯿﻨﯿﺪ ﺑﺎﻳﺪ ﺗﻌﺪاد ﺑﺎر اﺟـﺮای ﺣﻠﻘـﻪ ( اﻳﻨﺠـﺎ از ۰ ﺗـﺎ ۹۹۹ اﺳـﺖ ) و ھﻤﭽﻨﯿﻦ ﻧﺤﻮه ی رﺳﯿﺪن از ۰ ﺑﻪ ۰۰۰۱ را ﻣﺸﺨﺺ ﻛﺮد ( در اﻳﻨﺠﺎ ++ iاﺳـﺖ ﻳﻌﻨـﻲ ھـﺮ ﺑـﺎر ﻳـﻚ واﺣـﺪ ﺑـﻪ ﺷﻤﺎرﺷﮕﺮ ﺣﻠﻘﻪ اﺿﺎﻓﻪ ﻣﻲ ﺷﻮد. )
٢- در زﺑﺎن ﺳﻲ ++ iﻳﻌﻨﻲ ۱+ i=iو -- iﻳﻌﻨﻲ ۱- i=iو ﻛـﻼ i-=n ﻳﻌﻨـﻲ i=i-n و ﺑـﻪ ھﻤـﯿﻦ ﺗﺮﺗﯿـﺐ. ﺑـﺮای ﻣﺜـﺎل i*=n ﻳﻌﻨﻲ i=i*n و i+=n ﻳﻌﻨﻲ i=i+n و ...
٣- اﮔﺮ ﭘﺲ از ﺣﻠﻘﻪ ی for ﻳﻚ ﺧﻂ ﻛﺪ داﺷﺘﻪ ﺑﺎﺷﯿﻢ ﻧﯿﺎزی ﺑﻪ آﻛﻮﻻد ﻧﯿﺴﺖ ( ﻣﺎﻧﻨﺪ ﻗﺴﻤﺖ اول ﻛﺪ ). وﻟﻲ اﮔـﺮ ﺗﻌﺪاد ﺧﻄﻮط ﻣﺮﺑﻮط ﺑﻪ ﺑﺪﻧﻪ ی for زﻳﺎد ﺑﻮد ﺑﺎﻳﺪ ﺣﺘﻤﺎ از آﻛﻮﻻد اﺳﺘﻔﺎده ﺷﻮد ( ﻣﺎﻧﻨﺪ ﻗﺴﻤﺖ دوم ﻛﺪ ). ( اﻳـﻦ ﻗﺎﻋﺪه ای ﻛﻠﻲ اﺳﺖ در زﺑﺎﻧﮫﺎی ﻣﺸﺘﻖ ﺷﺪه از زﺑﺎن ﺳﻲ در ﻣﻮرد ھﺮ ﭼﯿﺰی! )
۴- ﻓﺮض ﻛﻨﯿﺪ در ﻗﺴﻤﺖ اول ﻛﺪ ﺑﺎﻻ ﺑﺠﺎی ۱۰۰۰ ﻣﻲ ﻧﻮﺷﺘﯿﺪ ۱۰۰۱ . ﺳﺮﻳﻌﺎ ﺑﺎ ﻳﻚ ﺧﻄﺎی زﻣـﺎن اﺟـﺮا ﻣﻮاﺟـﻪ ﻣﻲ ﺷﺪﻳﺪ. زﻳﺮا ﻣﻲ ﺧﻮاﺳﺘﯿﺪ ﺑﻪ ﻋﻀﻮی از آراﻳﻪ دﺳﺘﺮﺳﻲ ﭘﯿﺪا ﻛﻨﯿـﺪ ﻛـﻪ ﺗﻌﺮﻳـﻒ ﻧـﺸﺪه اﺳـﺖ. راه ﻣـﺪرن ﭼﻚ ﻛﺮدن اﻳﻦ ﻣﺴﺎﺋﻞ اﺳﺘﻔﺎده از ﺧﺎﺻﯿﺖ Lengthآراﻳﻪ اﺳﺖ ﻛﻪ در ﻗﺴﻤﺖ دوم ﻛـﺪ در ﻋﻤـﻞ ﻣـﺸﺎھﺪه ﻣﻲ ﻧﻤﺎﻳﯿﺪ. ھﻤﯿﺸﻪ از اﻳﻦ روش اﺳﺘﻔﺎده ﻛﻨﯿﺪ.
۵- ﺣﻠﻘﻪ ی اول ﻳﻌﻨﻲ اﻳﻨﻜﻪ ﻛﺎر ﭘﺮ ﻛﺮدن آراﻳﻪ intData را از ﺻﻔﺮ ﺗﺎ ۹۹۹ ﻳﻜﻲ ﻳﻜﻲ ( ++ ( iاﻧﺠﺎم ﺑﺪه.
اﺳﺘﻔﺎده از ﺣﻠﻘﻪ ی : while
ﻳﻚ ﺑﺮﻧﺎﻣﻪ ی ﺳﻲ ﺷﺎرپ ﺟﺪﻳﺪ consoleرا در VS.NET ﺑﺎز ﻛﻨﯿﺪ و ﻧﺎم آﻧـﺮا دراﺑﺘـﺪا ex۸۰ اﻧﺘﺨـﺎب ﻧﻤﺎﻳﯿـﺪ. ﺳـﭙﺲ ﻛـﺪ
زﻳﺮ را درون آن ﺑﻨﻮﻳﺴﯿﺪ :
;using System
namespace ex۸۰
}
class Class۱
}
[[STAThread
(static void Main(string[] args
}
;۱ = int n
(۶ < while (n
}
;(Console.WriteLine("Current value of n is {۰}", n
;++n
{
;()Console.ReadLine
{
{
{
ﺗﻮﺿﯿﺤﺎﺗﻲ در ﻣﻮرد ﻛﺪ ﻓﻮق :
١- ﺣﻠﻘﻪ ی while در ﺑﺎﻻ ﻛﺎر اﻧﺠﺎم ﺣﻠﻘﻪ را ﺗﺎ ھﻨﮕـﺎﻣﻲ اﻧﺠـﺎم ﻣـﻲ دھـﺪ ﻛـﻪ ﺷـﺮط ذﻛـﺮ ﺷـﺪه در اﺑﺘـﺪای آن ﺻﺎدق و ﺑﺮﻗﺮار ﺑﺎﺷﺪ. ﻳﻌﻨﻲ در ﺣﻠﻘﻪ ی ﻓﻮق ﺗﺎ وﻗﺘﻲ ۶< nاﺳﺖ اﻳﻦ ﺣﻠﻘﻪ اداﻣﻪ ﺧﻮاھﺪ ﻳﺎﻓﺖ.
٢- ﺣﻠﻘﻪ ی while ﺻﻔﺮ ﻳﺎ ﺑﯿﺸﺘﺮ ﺑﺎر ﻣﻤﻜﻦ اﺳﺖ اﺟﺮا ﺷﻮد.
٣- در ﻛﺪ ﻓﻮق از {۰} اﺳﺘﻔﺎده ﮔﺮدﻳﺪه اﺳﺖ. ﻣﺘﺪ WriteLineﺑﻪ ﺷﻤﺎ اﻳﻦ اﺟﺎزه را ﻣﻲ دھﺪ ﻛـﻪ nﺗـﺎ آرﮔﻮﻣـﺎن ﺑﺮای آن ﺗﻌﺮﻳﻒ ﻛﻨﯿﺪ و ﻣﻘﺎدﻳﺮ ھﺮ ﻛﺪام را ﻛﻪ ﺧﻮاﺳﺘﯿﺪ در ﻛـﺪ ﻧﻤـﺎﻳﺶ دھﯿـﺪ از { {xاﺳـﺘﻔﺎده ﻛﻨﯿـﺪ. در اﻳـﻦ ﻣﻮرد ﻣﻘﺪار آرﮔﻮﻣﺎن xام ﻧﻤﺎﻳﺶ داده ﻣﻲ ﺷﻮد.
اﺳﺘﻔﺎده از ﺣﻠﻘﻪ ی : do
ﻳﻚ ﺑﺮﻧﺎﻣﻪ ی ﺳﻲ ﺷﺎرپ ﺟﺪﻳﺪ consoleرا در VS.NETﺑﺎز ﻛﻨﯿﺪ و ﻧﺎم آﻧـﺮا دراﺑﺘـﺪا ex۹۰ اﻧﺘﺨـﺎب ﻧﻤﺎﻳﯿـﺪ. ﺳـﭙﺲ ﻛـﺪ
زﻳﺮ را درون آن ﺑﻨﻮﻳﺴﯿﺪ :
;using System
namespace ex۹۰
}
class Class۱
}
[[STAThread
(static void Main(string[] args
}
;int x
;۰ = int y
do
}
;++x = y
;(Console.WriteLine(x
;(۵ < }while(y
;()Console.ReadLine
{
{
{
ﺗﻮﺿﯿﺤﺎﺗﻲ در ﻣﻮرد ﻛﺪ ﻓﻮق :
١- اﻳﻦ ﺣﻠﻘﻪ ﺑﻪ ﺣﻠﻘﻪ ی do…whileﻣﻌﺮوف اﺳﺖ و ھﺮ دو ﺟﺰء آن ﺑﺎﻳﺪ ذﻛﺮ ﮔﺮدد.
٢- اﻳﻦ ﺣﻠﻘﻪ ﺗﺎ زﻣﺎﻧﻲ ﻛﻪ ﺷﺮط ذﻛﺮ ﺷﺪه در ﻗﻤﺴﺖ whileﺻﺤﯿﺢ اﺳﺖ اداﻣﻪ ﻣﻲ ﻳﺎﺑﺪ.
٣- اﻳﻦ ﺣﻠﻘﻪ در اﺑﺘﺪای ﻛﺎر ﺑﺪون ﺗﻮﺟﻪ ﺑﻪ ﻗﺴﻤﺖ while ﺣﺪاﻗﻞ ﻳﻜﺒﺎر اﺟﺮا ﻣﻲ ﺷﻮد. ( ﻣﺜﺎل زﻳﺮ را اﺟﺮا ﻧﻤﺎﻳﯿﺪ )
;۰۱ = int n
do
}
;(Console.WriteLine("Current value of n is {۰}", n
;++n
;(۶ < } while (n
اﺳﺘﻔﺎده از ﺣﻠﻘﻪ ی : foreach
ﻳﻚ ﺑﺮﻧﺎﻣﻪ ی ﺳﻲ ﺷﺎرپ ﺟﺪﻳﺪ console را در VS.NETﺑﺎز ﻛﻨﯿﺪ و ﻧﺎم آﻧـﺮا دراﺑﺘـﺪا ex۱۰ اﻧﺘﺨـﺎب ﻧﻤﺎﻳﯿـﺪ. ﺳـﭙﺲ ﻛـﺪ زﻳﺮ را درون آن ﺑﻨﻮﻳﺴﯿﺪ :
;using System
namespace ex۱۰
}
class Class۱
}
[[STAThread
(static void Main(string[] args
}
;۰ = int odd = ۰, even
;{۱۱,۸,۷,۵,۲,۱,۰} [] int[] arr = new int
(foreach (int i in arr
}
(۰ == ۲%if (i
;++even
else
;++odd
{
)Console.WriteLine
,"."Found {۰} Odd Numbers, and {۱} Even Numbers
; (odd, even
;()Console.ReadLine
{
{
{
ﺗﻮﺿﯿﺤﺎﺗﻲ در ﻣﻮرد ﻛﺪ ﻓﻮق :
١- از foreach ﺑﺮای ﺣﺮﻛﺖ در ﺑﯿﻦ اﻋﻀﺎی ﻳﻚ آراﻳﻪ (ﻣﺎﻧﻨﺪ ﻣﺜﺎل ﺑﺎﻻ) و ﻳﺎ ﻣﺠﻤﻮﻋﻪ اﻳﻲ از اﺷﯿﺎء اﺳـﺘﻔﺎده ﻣـﻲ ﺷﻮد (روﺷﻲ ﺷﻜﯿﻞ ، ﻣﺪرن و ﻣﻄﻤﺌﻦ! و ﺗﻘﺮﻳﺒﺎ ﺑﻪ ارث رﺳﯿﺪه از وﻳﮋوال ﺑﯿﺴﯿﻚ!! ).
٢- در زﺑﺎﻧﮫﺎی ﻣﺸﺘﻖ ﺷﺪه از ، Cﻋﻤﻠﮕﺮ % ، ﺑﺎﻗﯿﻤﺎﻧﺪه را ﻣﺤﺎﺳﺒﻪ ﻣﻲ ﻛﻨﺪ.
٣- در ﻛﺪ ﻓﻮق ﺑﺎ اﺳﺘﻔﺎده از ﺣﻠﻘﻪ ی foreachﺗﻚ ﺗﻚ اﻋﻀﺎی آراﻳﻪ در ﻣﻮرد زوج و ﻳﺎ ﻓـﺮد ﺑﻮدﻧـﺪ ﻣـﻮرد ﺑﺮرﺳـﻲ ﻗﺮار ﮔﺮﻓﺘﻪ اﻧﺪ و ﺗﻌﺪاد اﻋﻀﺎی زوج و ﻓﺮد در آﺧﺮ ﻧﻤﺎﻳﺶ داده ﻣﻲ ﺷﻮد.
نظرات شما عزیزان: